package com.siyu.model.dispatch.io;

import com.siyu.model.dispatch.utils.CurveDataItem;

import java.util.ArrayList;
import java.util.List;

public class SingleDamInput {
    private String reservoirName;  // 水库名称

    private String reservoirID;  // 水库ID

    private String startTime;  // 起始时间

    private double deadLevel;  // 死水位

    private double normalLevel;  // 正常蓄水位

    private double floodLevel;  // 防洪限制水位

    private int numPeriod;  // 调度时段数

    private int periodLength;  // 时段长度，s

    private int discretePointRate;  // 计算离散倍数，一般取2-10即可，根据结果是否出现负的流量值确定

    private double QDWaterLevel;  // 起调水位

    private double designWaterLevel; //设计洪水位

    private double FCQrelease; // 非常泄洪

    private double XZQrelease; // 限制下泄

    private double ANQrelease;  // 下游河道安全下泄

    private double CHQrelease;  // 敞泄流量

    private double floodPeak;  // 入库洪峰

    private double floodVolume;  // 入库洪量

    private double meanQrelease;  // 平均下泄

    private double meanLevel;  // 平均水位

    private List<Double> operationRunoffData;  // 入库来水

    private List<Double> intervalRunoffData;  // 下游区间来水

    private List<Double> upLevelLimitArray;  // 各个时段水位上限

    private List<Double> downLevelLimitArray;  // 各个时段水位下限

    private List<Double> upQreleaseLimitArray;  // 各时段下泄流量上限

    private List<Double> downQreleaseLimitArray;  // 各时段下泄流量下限

    private List<Double> evaLoss;  // 蒸发损失

    private List<CurveDataItem> curveLV;  // 水位库容曲线

    private List<CurveDataItem> curveLQ;  // 水位泄流能力曲线

    public SingleDamInput() {
        // TODO：其实如果初始化的值就是对应数据类型的默认值，可以不必赋值
        reservoirName = null;
        reservoirID = null;
        startTime = "2022-05-10 08:00:00";
        deadLevel = 0;
        normalLevel = 0;
        floodLevel = 0;
        numPeriod = 1;
        periodLength = 3600;
        discretePointRate = 7;
        QDWaterLevel = 0;
        designWaterLevel = 0;
        FCQrelease = 0;
        XZQrelease = 0;
        ANQrelease = 0;
        CHQrelease = 0;
        floodPeak = 0;
        floodVolume = 0;
        this.meanQrelease = 123;
        this.meanLevel = 123;
        operationRunoffData = new ArrayList<>();
        intervalRunoffData = new ArrayList<>();
        upLevelLimitArray = new ArrayList<>();
        downLevelLimitArray = new ArrayList<>();
        upQreleaseLimitArray = new ArrayList<>();
        downQreleaseLimitArray = new ArrayList<>();
        evaLoss = new ArrayList<>();
        curveLV = new ArrayList<>();
        curveLQ = new ArrayList<>();
    }

    public String getReservoirName() {
        return reservoirName;
    }

    public void setReservoirName(String reservoirName) {
        this.reservoirName = reservoirName;
    }

    public String getReservoirID() {
        return reservoirID;
    }

    public void setReservoirID(String reservoirID) {
        this.reservoirID = reservoirID;
    }

    public String getStartTime() {
        return startTime;
    }

    public void setStartTime(String startTime) {
        this.startTime = startTime;
    }

    public Double getDeadLevel() {
        return deadLevel;
    }

    public void setDeadLevel(Double deadLevel) {
        this.deadLevel = deadLevel;
    }

    public Double getNormalLevel() {
        return normalLevel;
    }

    public void setNormalLevel(Double normalLevel) {
        this.normalLevel = normalLevel;
    }

    public Double getFloodLevel() {
        return floodLevel;
    }

    public void setFloodLevel(Double floodLevel) {
        this.floodLevel = floodLevel;
    }

    public int getNumPeriod() {
        return numPeriod;
    }

    public void setNumPeriod(int numPeriod) {
        this.numPeriod = numPeriod;
    }

    public int getPeriodLength() {
        return periodLength;
    }

    public void setPeriodLength(int periodLength) {
        this.periodLength = periodLength;
    }

    public int getDiscretePointRate() {
        return discretePointRate;
    }

    public void setDiscretePointRate(int discretePointRate) {
        this.discretePointRate = discretePointRate;
    }

    public Double getQDWaterLevel() {
        return QDWaterLevel;
    }

    public void setQDWaterLevel(Double QDWaterLevel) {
        this.QDWaterLevel = QDWaterLevel;
    }

    public Double getDesignWaterLevel() {
        return designWaterLevel;
    }

    public void setDesignWaterLevel(Double designWaterLevel) {
        this.designWaterLevel = designWaterLevel;
    }

    public Double getFCQrelease() {
        return FCQrelease;
    }

    public void setFCQrelease(Double FCQrelease) {
        this.FCQrelease = FCQrelease;
    }

    public Double getXZQrelease() {
        return XZQrelease;
    }

    public void setXZQrelease(Double XZQrelease) {
        this.XZQrelease = XZQrelease;
    }

    public Double getANQrelease() {
        return ANQrelease;
    }

    public void setANQrelease(Double ANQrelease) {
        this.ANQrelease = ANQrelease;
    }

    public Double getCHQrelease() {
        return CHQrelease;
    }

    public void setCHQrelease(Double CHQrelease) {
        this.CHQrelease = CHQrelease;
    }

    public double getFloodPeak() {
        return floodPeak;
    }

    public void setFloodPeak(double floodPeak) {
        this.floodPeak = floodPeak;
    }

    public double getFloodVolume() {
        return floodVolume;
    }

    public void setFloodVolume(double floodVolume) {
        this.floodVolume = floodVolume;
    }

    public double getMeanQrelease() {
        return meanQrelease;
    }

    public void setMeanQrelease(double meanQrelease) {
        this.meanQrelease = meanQrelease;
    }

    public double getMeanLevel() {
        return meanLevel;
    }

    public void setMeanLevel(double meanLevel) {
        this.meanLevel = meanLevel;
    }

    public List<Double> getOperationRunoffData() {
        return operationRunoffData;
    }

    public void setOperationRunoffData(List<Double> operationRunoffData) {
        this.operationRunoffData = operationRunoffData;
    }

    public List<Double> getIntervalRunoffData() {
        return intervalRunoffData;
    }

    public void setIntervalRunoffData(List<Double> intervalRunoffData) {
        this.intervalRunoffData = intervalRunoffData;
    }

    public List<Double> getUpLevelLimitArray() {
        return upLevelLimitArray;
    }

    public void setUpLevelLimitArray(List<Double> upLevelLimitArray) {
        this.upLevelLimitArray = upLevelLimitArray;
    }

    public List<Double> getDownLevelLimitArray() {
        return downLevelLimitArray;
    }

    public void setDownLevelLimitArray(List<Double> downLevelLimitArray) {
        this.downLevelLimitArray = downLevelLimitArray;
    }

    public List<Double> getUpQreleaseLimitArray() {
        return upQreleaseLimitArray;
    }

    public void setUpQreleaseLimitArray(List<Double> upQreleaseLimitArray) {
        this.upQreleaseLimitArray = upQreleaseLimitArray;
    }

    public List<Double> getDownQreleaseLimitArray() {
        return downQreleaseLimitArray;
    }

    public void setDownQreleaseLimitArray(List<Double> downQreleaseLimitArray) {
        this.downQreleaseLimitArray = downQreleaseLimitArray;
    }

    public List<Double> getEvaLoss() {
        return evaLoss;
    }

    public void setEvaLoss(List<Double> evaLoss) {
        this.evaLoss = evaLoss;
    }

    public List<CurveDataItem> getCurveLV() {
        return curveLV;
    }

    public void setCurveLV(List<CurveDataItem> curveLV) {
        this.curveLV = curveLV;
    }

    public List<CurveDataItem> getCurveLQ() {
        return curveLQ;
    }

    public void setCurveLQ(List<CurveDataItem> curveLQ) {
        this.curveLQ = curveLQ;
    }
}
